package 面试2025.飞猪;

public class Test {
    /**
     * 1、一个工厂，需要三名师傅，分别准备面包（师傅A），制作糕点（师傅B），封装打包（师傅C），要求这三个师傅（线程）一起协作，按照
     *    1. 准备面包（X）
     *    2. 制作糕点（Y）
     *    3. 封装打包（Z）
     * 形式“准备面包、制作糕点、封装打包、准备面包、制作糕点、封装打包、...”输出，制作10个面包就可以。
     * 允许使用XYZ替代。
     *
     * 输出样例1： 准备面包、制作糕点、封装打包、准备面包、制作糕点、封装打包.....循环10次。
     */
    private static int num = 0;
    private static Object lock = new Object();
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> print("准备面包", 0));
        Thread t2 = new Thread(() -> print("制作糕点", 1));
        Thread t3 = new Thread(() -> print("封装打包", 2));
        t1.start();
        t2.start();
        t3.start();
    }
    public static void print(String str, int curThread){
        for(int i = 0;i < 10;i++){
            synchronized (lock){
                lock.notify();
                while(!(num % 3 == curThread)){
                    try {
                        lock.wait();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                num++;
                System.out.println(Thread.currentThread().getName() + ":" + str + "---" + num);
                lock.notifyAll();
            }
        }
    }
}
